minios : netfront driver fixes.
authorkaf24@localhost.localdomain <kaf24@localhost.localdomain>
Fri, 26 Jan 2007 13:51:00 +0000 (13:51 +0000)
committerkaf24@localhost.localdomain <kaf24@localhost.localdomain>
Fri, 26 Jan 2007 13:51:00 +0000 (13:51 +0000)
- Handle returned backend==NULL || mac==NULL, this leads sometimes to a crash.
- Remove unnecessary (and bogus) initialisation of np->rx.req_prod_pvt

Signed-off-by: Dietmar Hahn <dietmar.hahn@fujitsu-siemens.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
extras/mini-os/netfront.c

index 3871160d552e22f48cac558b2009a5e20b0808f9..4c10dc8770d2b3fa9db106d1439e75594fbed4c0 100644 (file)
@@ -324,6 +324,14 @@ done:
     msg = xenbus_read(XBT_NIL, "device/vif/0/backend", &backend);
     msg = xenbus_read(XBT_NIL, "device/vif/0/mac", &mac);
 
+    if ((backend == NULL) || (mac == NULL)) {
+        struct evtchn_close op = { info->local_port };
+        printk("%s: backend/mac failed\n", __func__);
+        unbind_evtchn(info->local_port);
+        HYPERVISOR_event_channel_op(EVTCHNOP_close, &op);
+        return;
+    }
+
     printk("backend at %s\n",backend);
     printk("mac is %s\n",mac);
 
@@ -383,10 +391,7 @@ void init_rx_buffers(void)
     netif_rx_request_t *req;
     int notify;
 
-    np->rx.req_prod_pvt = requeue_idx;
-
-
-    /* Step 2: Rebuild the RX buffer freelist and the RX ring itself. */
+    /* Rebuild the RX buffer freelist and the RX ring itself. */
     for (requeue_idx = 0, i = 0; i < NET_RX_RING_SIZE; i++) 
     {
         struct net_buffer* buf = &rx_buffers[requeue_idx];
@@ -402,16 +407,12 @@ void init_rx_buffers(void)
 
     np->rx.req_prod_pvt = requeue_idx;
 
-
-
     RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&np->rx, notify);
 
-    if(notify) 
+    if (notify) 
         notify_remote_via_evtchn(np->evtchn);
 
     np->rx.sring->rsp_event = np->rx.rsp_cons + 1;
-
-
 }